import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * Description： TODO
 * Author： 王多鱼
 * CreateTime： 2021/6/10 20:46
 **/
//集合不安全及解决办法
public class ContainerNotSafeDemo {
    public static void main(String[] args) {
//        List<String> list = new ArrayList<>();
//        for (int i = 1; i <=30 ; i++) {
//            new Thread(()->{
//                list.add(UUID.randomUUID().toString().substring(0,8));
//                System.out.println(list);
//            },String.valueOf(i)).start();
//        }
        //java.util.ConcurrentModificationException

//解决方法：
//        List<String> list = new Vector<>();
//        for (int i = 1; i <=30 ; i++) {
//            new Thread(()->{
//                list.add(UUID.randomUUID().toString().substring(0,8));
//                System.out.println(list);
//            },String.valueOf(i)).start();
//        }

//        List<String> list = Collections.synchronizedList(new ArrayList<>());
//        for (int i = 1; i <=30 ; i++) {
//            new Thread(()->{
//                list.add(UUID.randomUUID().toString().substring(0,8));
//                System.out.println(list);
//            },String.valueOf(i)).start();
//        }

//        List<String> list = new CopyOnWriteArrayList<>();
//
//        for (int i = 1; i <=30 ; i++) {
//            new Thread(()->{
//                list.add(UUID.randomUUID().toString().substring(0,8));
//                System.out.println(list);
//            },String.valueOf(i)).start();
//        }

//
//        Set<String> set = new HashSet<>();
//        for (int i = 1; i <=30 ; i++) {
//            new Thread(()->{
//                set.add(UUID.randomUUID().toString().substring(0,8));
//                System.out.println(set);
//            },String.valueOf(i)).start();
//        }
//
//
//        Set<String> set = Collections.synchronizedSet(new HashSet<>());
//        for (int i = 1; i <=30 ; i++) {
//            new Thread(()->{
//                set.add(UUID.randomUUID().toString().substring(0,8));
//                System.out.println(set);
//            },String.valueOf(i)).start();
//        }

//        Set<String> set = new CopyOnWriteArraySet<>();
//        for (int i = 1; i <=30 ; i++) {
//            new Thread(()->{
//                set.add(UUID.randomUUID().toString().substring(0,8));
//                System.out.println(set);
//            },String.valueOf(i)).start();
//        }

//        Map<String,String> map = new HashMap();
//        for (int i = 1; i <=30 ; i++) {
//            new Thread(()->{
//                map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8));
//                System.out.println(map);
//            },String.valueOf(i)).start();
//        }

//        Map<String,String> map = new ConcurrentHashMap<>();
//        for (int i = 1; i <=30 ; i++) {
//            new Thread(()->{
//                map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8));
//                System.out.println(map);
//            },String.valueOf(i)).start();
//        }

//        Map<String,String> map = Collections.synchronizedMap(new ConcurrentHashMap<>());
//        for (int i = 1; i <=10 ; i++) {
//            new Thread(()->{
//                map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8));
//                System.out.println(map);
//            },String.valueOf(i)).start();
//        }
    }
}